package com.coszero.utils.utils

import android.annotation.TargetApi
import android.content.Context
import android.graphics.Point
import android.os.Build
import android.view.Display
import android.view.WindowManager

/**
 * @author xmqian
 * @date 2018/5/25
 * @desc Android密度单位转换
 * @version 1
 */
object DensityUtil {
    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    @JvmStatic
    fun dip2px(context: Context, dpValue: Float): Int {
        val scale: Float = context.getResources().getDisplayMetrics().density
        return (dpValue * scale + 0.5f).toInt()
        /*系统转换方式*/
//        float scale = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, context.getResources().getDisplayMetrics());
//        return (int) scale;
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    fun px2dip(context: Context, pxValue: Float): Int {
        val scale: Float = context.getResources().getDisplayMetrics().density
        return (pxValue / scale + 0.5f).toInt()
    }

    /**
     * 根据手机的分辨率从 sp(像素) 的单位 转成为 px
     *
     * @param paramContext
     * @param paramFloat
     * @return
     */
    fun sp2px(paramContext: Context, paramFloat: Float): Int {
        val f: Float = paramContext.getResources().getDisplayMetrics().scaledDensity
        return (paramFloat * f + 0.5f).toInt()
        /*系统转换方式*/
//        float scale = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, paramFloat, paramContext.getResources().getDisplayMetrics());
//        return (int) scale;
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 sp
     *
     * @param paramContext
     * @param paramFloat
     * @return
     */
    fun px2sp(paramContext: Context, paramFloat: Float): Int {
        val f: Float = paramContext.getResources().getDisplayMetrics().scaledDensity
        return (paramFloat / f + 0.5f).toInt()
    }

    /**
     * 获取屏幕尺寸
     */
    @Suppress("deprecation")
    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    fun getScreenSize(context: Context): Point {
        val windowManager: WindowManager =
            context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val display: Display = windowManager.getDefaultDisplay()
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            return Point(display.getWidth(), display.getHeight())
        } else {
            val point: Point = Point()
            display.getSize(point)
            return point
        }
    }
}
